import { UserConfig,ConfigEnv,defineConfig, loadEnv } from 'vite'

// 新建 /src/types 目录用于存放自动导入函数和组件的TS类型声明文件
import AutoImport from "unplugin-auto-import/vite";
import Components from "unplugin-vue-components/vite";

//  element plus 按需自动导入 element plus 按需自动导入
import { ElementPlusResolver } from "unplugin-vue-components/resolvers";
import Icons from "unplugin-icons/vite";
import IconsResolver from "unplugin-icons/resolver";

//整合 SVG 图标
import { createSvgIconsPlugin } from "vite-plugin-svg-icons";

//整合 UnoCSS
import UnoCSS from 'unocss/vite'

import vue from '@vitejs/plugin-vue'

import path from "path"
const pathSrc = path.resolve(__dirname,"src")
const pathImg = path.resolve(__dirname,"src/assets/imgs")
export default defineConfig(({mode}:ConfigEnv): UserConfig =>{
  const env = loadEnv(mode,process.cwd())
  console.log(env.VITE_APP_TARGET_URL,'env.VITE_APP_BASE_API')
  return {
    resolve:{
      alias:{
        "@": pathSrc,
        "@img":pathImg
      }
    },
    css: {
      // CSS 预处理器
      preprocessorOptions: {
          //define global scss variable
          scss: {
              javascriptEnabled: true,
            additionalData: `
            @use "@/styles/variables.scss" as *;
          `,
          }
      }
  },

    server:{
      host: "192.168.137.1", // 允许IP访问
      port: Number(env.VITE_APP_PORT), // 应用端口
      open: true, // 运行是否自动打开浏览器
      proxy:{
        /** 接口代理解决跨域 */
        [env.VITE_APP_BASE_API]: {
          changeOrigin: true,
          target: env.VITE_APP_TARGET_URL, // https://api.xxx.com
          rewrite: (path) =>
              path.replace(
                  new RegExp("^" + env.VITE_APP_BASE_API), // ^/dev-api
                  env.VITE_APP_TARGET_BASE_API // ""
              ), // 将 /dev-api 开头的请求转发至 target
        },
      }
    },
    plugins:[
      vue(),
      UnoCSS({ /* options */ }),
      AutoImport({
        // 自动导入 Vue 相关函数，如：ref, reactive, toRef 等
        imports: ["vue","@vueuse/core"],
        eslintrc: {
          enabled: false, // 是否自动生成 eslint 规则，建议生成之后设置 false
          filepath: "./.eslintrc-auto-import.json", // 指定自动导入函数 eslint 规则的文件
          globalsPropValue: true,
        },
        resolvers: [
          // 自动导入 Element Plus 相关函数，如：ElMessage, ElMessageBox... (带样式)
          ElementPlusResolver(),
          IconsResolver({}),
        ],
        vueTemplate: true,
        dts: path.resolve(pathSrc, "types", "auto-imports.d.ts"), // 指定自动导入函数TS类型声明文件路径
      }),
      Components({
        resolvers: [
          // 自动导入 Element Plus 组件
          ElementPlusResolver(),
          // 自动注册图标组件
          IconsResolver({
            enabledCollections: ["ep"] // element-plus图标库，其他图标库 https://icon-sets.iconify.design/
          }),
        ],
        dirs: ["src/**/components"], // 指定自定义组件位置(默认:src/components)
        dts: false, // 配置文件位置(false:关闭自动生成)
        // dts: "src/types/components.d.ts",
      }),
      Icons({
        // 自动安装图标库
        autoInstall: true,
      }),
      createSvgIconsPlugin({
        // 指定需要缓存的图标文件夹
        iconDirs: [path.resolve(pathSrc, "assets/icons")],
        // 指定symbolId格式
        symbolId: "icon-[dir]-[name]",
      }),
    ],
    // 构建
    build: {
      chunkSizeWarningLimit: 2000, // 消除打包大小超过500kb警告
      minify: "terser", // Vite 2.6.x 以上需要配置 minify: "terser", terserOptions 才能生效
      terserOptions: {
        compress: {
          keep_infinity: true, // 防止 Infinity 被压缩成 1/0，这可能会导致 Chrome 上的性能问题
          drop_console: true, // 生产环境去除 console
          drop_debugger: true, // 生产环境去除 debugger
        },
        format: {
          comments: false, // 删除注释
        },
      },
    },
  }
})
